/*
 * @Descripttion:
 * @version:
 * @Author: zhaomangang
 * @Date: 2024-06-15 09:59:01
 * @LastEditors: zhaomangang
 * @LastEditTime: 2024-06-25 17:27:14
 */

#include "../include/audio_capture.h"
#include "../include/common.h"

AudioCapture::AudioCapture(QObject *parent) : QObject(parent)
{
    // init
    initAudioDevice();
    file_ = std::make_shared<QFile>();
}

AudioCapture::~AudioCapture()
{
    
}


void AudioCapture::initAudioDevice()
{
    // 打开默认的音频输入设备
    QAudioDeviceInfo audioDeviceInfo = QAudioDeviceInfo::defaultInputDevice();
    // 判断本地是否有录音设备
    if (audioDeviceInfo.isNull() == false)
    {
        // 设置音频文件格式
        QAudioFormat format;
        // 设置采样频率，常见的有16000、44100、48000
        format.setSampleRate(16000);
        // 设置通道数，单声道、双声道、5.1声道
        format.setChannelCount(1);
        // 设置每次采样得到的样本数据位值，8位、16位
        format.setSampleSize(16);
        // 设置编码方法
        format.setCodec("audio/pcm");
        // 判断当前设备设置是否支持该音频格式
        if (audioDeviceInfo.isFormatSupported(format) == NULL)
        {
            format = audioDeviceInfo.nearestFormat(format);
        }
        // 创建录音对象
        audio_input_ = std::make_shared<QAudioInput>(format);
    }
    else
    {
        // 没有录音设备
        RB_DEBUG << "Current not have record device";
    }
}

void AudioCapture::startCapture(QString filename)
{
    /* 创建文件并打开 */
    file_->setFileName(filename);
    file_->open(QIODevice::WriteOnly | QIODevice::Truncate);
    // 开始录音
    audio_input_->start(file_.get());
}

QString AudioCapture::stopCapture()
{
    audio_input_->stop();
    QString file_name = file_->fileName();
    file_->close();
    return file_name;
}

